import { autoUpdater } from 'electron-updater'
import { ipcMain } from 'electron'
import {isDevelopment} from './env_config'
import path from 'path'
import PARAME from '@/complete/param/parameterList'

let mainWindow = null;

export function updateHandle(window, feedUrl) {
  mainWindow = window;

  const message = {
    error: '检查更新出错',
    checking: '正在检查更新……',
    update: '检测到新版本',
    updateNot: '已下载完成，地址：',
    updateNotAva: '您现在使用的就是最新版本'
  };

  if (isDevelopment) {
    // old-update.yml 文字自己编写，用于本地测试，线上打包不需要
    autoUpdater.updateConfigPath = path.join(__filename, '../../build/old-update.yml')
  }
  // 设置更新包的地址
  autoUpdater.setFeedURL(feedUrl);
  // 取消自动下载
  autoUpdater.autoDownload = false
  // 监听升级失败事件
  autoUpdater.on('error', function () {
    sendUpdateMessage({
      cmd: 'error',
      message: message.error
    })
  });
  // 监听开始检测更新事件
  autoUpdater.on('checking-for-update', function () {
    sendUpdateMessage({
      cmd: 'checking-for-update',
      message: message.checking
    })
  });
  // 监听发现可用更新事件
  autoUpdater.on('update-available', function () {
    sendUpdateMessage({
      cmd: 'update-available',
      message: message.update
    })
  });
  // 监听没有可用更新事件
  autoUpdater.on('update-not-available', function () {
    sendUpdateMessage({
      cmd: 'update-not-available',
      message: message.updateNotAva
    })
  });
  // 更新下载进度事件
  autoUpdater.on('download-progress', function (progressObj) {
    sendUpdateMessage({
      cmd: 'download-progress',
      message: progressObj
    })
  });
  // 监听下载完成事件
  autoUpdater.on('update-downloaded', function (event) {
    sendUpdateMessage({
      cmd: 'update-downloaded',
      message: message.updateNot + event.downloadedFile
    })
    // 退出并安装更新包
    autoUpdater.quitAndInstall();
  });
  // 接收渲染进程消息，开始检查更新
  ipcMain.on(PARAME.GETCHECKUPDATE_MAIN_APP, () => {
    // 执行自动更新检查
    autoUpdater.checkForUpdates().catch(() => {
      sendUpdateMessage({
        cmd: 'error',
        message: message.error
      })
    })
  })
  // 下载
  ipcMain.on(PARAME.GETCHECKUPDATEINFO_MAIN_APP, () => {
    autoUpdater.downloadUpdate()
  })
}
// 给渲染进程发送消息
function sendUpdateMessage(text) {
  mainWindow.webContents.send(PARAME.SETCHECKUPDATE_MAIN_APP, text)
}
